// // 节流
// let timer = null
// // 状态
// let flag = true
// window.onresize = function () {
//   // 状态为false时不执行
//   if (!flag) return
//   flag = false
//   // 计时，1s后切换false状态
//   timer = setTimeout(() => {
//     flag = true
//     console.log('页面大小发生改变');
//   }, 1000);
// }

// 节流函数封装
function throttle (fn, delay) {
  let timer = null
  return function () {
    // 如果有计时器了，就直接退出函数
    if (timer) return
    // 获取该函数执行作用域的this
    let _this = this
    // 获取该函数的参数
    let args = arguments

    timer = setTimeout(function () {
      // 改变函数的this指向并传参
      fn().call(_this, args)
      // 在delay执行完fn后清空timer，此时if(timer) 为false，可以进入下一轮计时行为
      timer = full
    }, delay)
  }
}

changeTip(){
  console.log('页面大小改变');
}

window.addEventListener('resize', throttle(changeTip, 1000))

// 原理：
// 通过设置一个状态变量来决定函数是否执行。
// 第一次执行时，flag状态由true-->false，此时计时器启动；在异步操作执行前，flag状态始终为false,直到执行异步任务后，flag状态重新复原为true。通过flag状态限制高频率执行函数
